Gespraeche 02.11.1996 ========== Die Gespraeche der Spielercharaktere werden durch eine eigene "Programmiersprache" gesteuert. Das sogenannte "Gespraechsprogramm" ist in einer gewoehnlichen Textdatei abgelegt, die den Namen "Gespraech_.txt" traegt, wobei eine Zahl ist. WICHTIG: Es duerfen maximal 250 Zeichen pro Textzeile verwendet werden. Wenn ein "Gespraechsprogramm" ausgefuehrt wird, wird in der ersten Zeile des "Programms" begonnen und Zeile fuer Zeile ausgefuehrt. PRAEPROZESSOR ------------- Die Datei "Gespraech_.txt" wird beim Einlesen schon bearbeitet, um Speicher zu sparen - Alle Kommentare werden entfernt - Alle Tabulatoren werden durch EIN Leerzeichen ersetzt - Fuehrende Leerzeichen werden entfernt - Nachfolgende Leerzeichen werden entfernt Entstehen dadurch Leerzeilen, so werden diese erst gar nicht eingelesen. ACHTUNG: Die Anzahl der hiernach verbleibenden Textzeilen ist programmintern begrenzt: Dies ist die Ausgabe "Max. Zeilenzahl in Gespraechsdatei" im Hauptmenu (zur Zeit 250 Zeilen). Danach wird die im Speicher befindliche Datei weiterbearbeitet: - bei Sprunganweisungen (ausgenommen der INPUT-Befehl) werden die Sprungmarken durch Zeilennummern ersetzt. Dadurch ist es waehrend eines Gespraechs nicht mehr noetig, die Sprungmarke zu suchen, sondern man das Programm kann die Zeilen direkt anspringen - die Befehle werden durch Zahlencode ersetzt (=> spart Platz) BEFEHLE ------- In jede Zeile kann nur ein Befehl stehen, wobei allerdings fuehrende Leerzeichen zulaessig sind. AUSNAHME: In einer Zeile kann ein Befehl stehen, der von einem Kommentar gefolgt werden kann - schliesslich ist ein Kommentar kein Befehl. WICHTIG: Befehle sind "case-sensitive", d.h. sie muessen genau so, wie hier angegeben, geschrieben werden - die Gross- bzw. Kleinschreibung muss genau eingehalten werden. & Kommentar Alle dem Kaufmannsund folgenden Zeichen bis zum Zeilenende werden ignoriert END Gespraechsende Dieser Befehl beendet das Gespraech an dieser Stelle ACHTUNG: Es darf kein "Open End" geben - das Gespraech muss immer durch ein END abgeschlossen sein # Textausgabe Der dem Kreuz folgende Text wird auf dem Bildschirm ausgegeben. Nach der Textausgabe wird der gesamte Text um eine Zeile hochgescrollt. In duerfen folgende Steueranweisungen vorkommen: Die []-Anweisung: [] Hierdurch wird der farblich hervorgehoben Bsp: Mein Name ist [Ragor], der Grossartige Hierdurch wird das Wort "Ragor" hervorgehoben. Die *-Anweisung Der Stern '*' wird durch den Namen des Charakters ersetzt, der gerade redet. Z.B.: Der Charakter Ragor redet. Dann wird die Zeile: #Hallo *! ausgegeben als: Hallo Ragor! ACHTUNG: Ein Name kann bis zu 20 Zeichen lang sein, es muss daher darauf geachtet werden, dass noch genug Platz in der Zeile ist, um den Namen einfuegen zu koennen. § Sprungmarke Der hinter dem Paragraphenzeichen stehende Text wird als Name der Sprungmarke betrachtet. Sprungmarken sind "case-insensitiv", d.h. es wird nicht auf Gross- und Kleinschreibung geachtet. Der Grund dafuer ist der Befehl INPUT - durch die Nichtbeachtung der Rechtschreibung wird die Abfrage wesentlich vereinfacht... Bsp: §Verkauf ACHTUNG: Sprungmarkennamen muessen eindeutig sein!! GOTO Sprungbefehl Der hinter dem GOTO folgende Text wird als Name der der anzuspringenden Sprungmarke angesehen Bsp: GOTO Verkauf INPUT ... Benutzergelenkter Sprungbefehl Erwartet eine Texteingabe. Diese Texteingabe wird mit den angegebenen Argumenten verglichen (case-insensitiv). Gibt es eine Uebereinstimmung zwischen einem Wort in dem eingegebenen Text und den angegebenen Argumenten, so wird zu der Sprungmarke mit diesem Namen gesprungen. Wird keine Uebereinstimmung gefunden, so wird in der folgenden Zeile fortgesetzt Die Argumente werden durch Leerzeichen getrennt angegeben Nach erfolgter Eingabe wird der Text um eine Zeile hochgescrollt. ACHTUNG: Eine leere Eingabe, d.h. druecken der RETURN-Taste ohne Eingabe beendet das Gespraech! Bsp: INPUT Name Beruf Alter SET Setzt die interne Merkvariable mit der Nummer Das Programm wird in der naechsten Zeile fortgesetzt Bsp: SET 2 UNSET Loescht die interne Merkvariable mit der Nummer Das Programm wird in der naechsten Zeile fortgesetzt Bsp: UNSET 3 HINWEIS: Die Merkervariablen haben nur zwei Zustaende, naemlich gesetzt oder ungesetzt. IFSET Falls die interne Merkvariable mit der Nummer gesetzt ist wird zur Sprungmarke mit dem Namen gesprungen. Ist sie nicht gesetzt, so wird in der naechsten Programmzeile fortgefahren INKEY Gibt einen Hinweistext in der untersten Zeile aus und wartet auf Tastendruck/Maustaste. Nach erfolgtem Druck wird die Zeile geloescht. Es erfolgt kein Scrolling YN Wartet auf die Eingabe von "Ja" oder "Nein" Bei Eingabe von "Ja" wird zur Marke "posmarke" gesprungen, bei Eingabe von "Nein" wird in der folgenden Zeile fortgesetzt EP Erfahrungspunkte werden an die Gruppe verteilt Es wird der Text: "Die Gruppe erhaelt Erfahrungspunkte" ausgegeben. IFUNSET Falls die interne Merkvariable mit der Nummer NICHT gesetzt ist wird zur Sprungmarke mit dem Namen gesprungen Ist sie nicht gesetzt, so wird in der naechsten Zeile fortgefahren GETITEM Die Gruppe erhaelt den Gegenstand mit Namen . Dieser Gegenstandsname muss eindeutig sein (und, natuerlich, existieren) Bsp: GETITEM Schwert Bemerkung: Da beim Erhalten eines Gegenstands der Textausgabebereich geloescht wird, sollte vor dem Aufruf von GETITEM der Befehl INKEY verwendet werden. GIVEITEM Es soll ein Mitglied der Gruppe ausgewaehlt werden, welches den Gegenstand mit Namen hergibt. Dieser Name muss NICHT eindeutig sein, d.h. das Mitglied kann mehrere Gegenstaende dieses Namens bei sich tragen Wird kein Gruppenmitglied ausgewaehlt oder hat das gewaehlte Gruppenmitglied den Gegenstand nicht, dann wird zu gesprungen. Andernfalls wird in der naechsten Zeile fortgesetzt und der Gegenstand wird abgegeben. Bsp: GIVEITEM Schwert HatEsNicht MONEY Silberstuecke werden an die Gruppe verteilt. Es wird der Text: "Die Gruppe erhaelt Silberstuecke" ausgegeben. GIVEMONEY Es soll ein Mitglied der Gruppe ausgewaehlt werden, welches Geldstuecke hergibt. Wird kein Gruppenmitglied ausgewaehlt oder hat es nicht genug Geld, dann wird zu gesprungen. Andernfalls wird in der naechsten Zeile fortgesetzt und das Geld wird abgegeben. Bsp: GIVEMONEY 20 HatKeinGeld FOLLOW Die Charakterdatei mit der Nummer wird geladen und der darin enthaltene Charakter der Gruppe hinzugefuegt Tritt hierbei ein Fehler auf (Datei nicht gefunden, kein Platz in der Gruppe, ...) dann wird zur Marke gesprungen TEST Fuehrt eine Menschenkenntnisprobe modifiziert mit durch > 0 Erschwernis < 0 Erleichterung Misslingt die Probe, dann wird zur gesprungen Andernfalls wird in der naechsten Zeile fortgesetzt Z.B. kann man hiermit den Spielern Zusatzinfos zukommen lassen - zur Illustration ein kurzes Beispiel: #Allerbeste Ware! Nur 10000 Goldstuecke... TEST 0 misslungen #Du hast das Gefuehl, der Haendler luegt. §misslungen #Wollt ihr es kaufen? ATTACK Die Gruppe wird von Gegnern mit der Nummer angegriffen. Im Falle des Sieges wird zu gesprungen Andernfalls wird in der naechsten Zeile fortgesetzt. Kann der angegebene Gegner nicht geladen werden (d.h. tritt ein Fehler auf), dann wird in der naechsten Zeile fortgesetzt der Kampf wird also als verloren gewertet. Bsp: ATTACK 1 4 sieg RACE Falls der Sprecher zur Rasse gehoert wird zur Sprungmarke mit dem Namen gesprungen Ist dies nicht der Fall, so wird in der naechsten Zeile fortgefahren Zur Zeit gibt es folgende Rassen: Rasse SONSTIGE 0 MENSCH 1 TROLL 2 ELF 3 GOBLIN 4 KOBOLD 5 ZWERG 6 ORK 7 HALBELF 8 HALBORK 9 HOBBIT 10 Bsp: RACE 1 IstMensch Bemerkung: Hiermit kann man Abneigungen/Vorlieben von Gespraechspartnern gegenueber bestimmten Rassen einbauen LEARN Der Sprecher lernt die Rezeptur 0 = Heiltrank siehe auch: Rezepte.txt Bsp: LEARN 0 STYLE-GUIDE =========== * In jedem Gespraech sollten folgende Begriffe akzeptiert werden: ende - Um das Gespraech zu beenden name - Um den Namen des Gespraechspartners zu erfahren beruf - Um den Beruf des Gespraechspartners zu erfahren alter - Um das Alter des Gespraechspartners zu erfahren * Erscheinen im Text Schluesselwoerter, dann sollten sie mit den Klammern [ ] hervorgehoben werden.